package huawei.com.http;

/**
 * 作者：杨松松
 * 日期：2017/7/24 21:10
 * 邮箱：1026334022@qq.com
 */
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import huawei.com.util.MD5Util;
import huawei.com.util.OkHttpUtil;

public class ShoujiHuaFei {
    /** 申请的接口Appkey */
    public static final String KEY ="848ebb01710acbd3034426d4a77b16dc";
    public static final String OPEN_ID="JH0debff73c37e3cc92fc2dd981ffdb617";//在个人中心查询
    public static final String telCheckUrl = "http://op.juhe.cn/ofpay/mobile/telcheck?cardnum=*&phoneno=!&key="+KEY;
    public static final String telQueryUrl="http://op.juhe.cn/ofpay/mobile/telquery?cardnum=*&phoneno=!&key="+KEY;
    public static final String onlineUrl="http://op.juhe.cn/ofpay/mobile/onlineorder?key="+KEY+"&phoneno=!&cardnum=*&orderid=@&sign=$";
    public static final String yueUrl="http://op.juhe.cn/ofpay/mobile/yue?key="+KEY+"&"+"timestamp=%&sign=$";
    public static final String orderstaUrl="http://op.juhe.cn/ofpay/mobile/ordersta?key="+KEY+"&orderid=!";
    public static final String orderListUrl="http://op.juhe.cn/ofpay/mobile/orderlist?key="+KEY;


    /**
     * 1.检测手机号码是否能充值接口
     * @param phone 手机号码
     * @param cardnum 充值金额,目前可选：5、10、20、30、50、100、300
     * @return 返回错码，0为允许充
    值的手机号码及金额，其他为不可以或其他错误
     * @throws Exception
     */
    public static int telCheck(String phone,int cardnum) throws Exception{
        int error_code=0;
        String result = get(telCheckUrl.replace("*", cardnum+"").replace("!", phone));
        error_code = new JSONObject(result).getInt("error_code");
        return error_code;
    }

    /**
     * 2.根据手机号和面值查询商品信息
     * @param phone 手机号码
     * @param cardnum 充值金额,目前可选：5、10、20、30、50、100、300
     * @return String类型结果
     * @throws Exception
     */
    public static String telQuery(String phone,int cardnum) throws Exception{
        String result = get(telQueryUrl.replace("*", cardnum+"").replace("!", phone));
        return result;
    }

    /**
     * 3.依据用户提供的请求为指定手机直接充值
     * @param phone 手机号码
     * @param cardnum 充值金额,目前可选：5、10、20、30、50、100、300
     * @param orderid 商家订单号，8-32位字母数字组合，自定义
     * @return 返回String结果
     * @throws Exception
     */
    public static String onlineOrder(String phone,int cardnum,String orderid) throws Exception{
        String result = null;
    //Md5Util工具类
        String sign = MD5Util.getMD5(OPEN_ID + KEY + phone + cardnum + orderid);
        result = get(onlineUrl.replace("*", cardnum+"").replace("!", phone).replace("@", orderid).replace("$", sign));
        return result;
    }
    /**
     * 4.查询账户余额
     * @return
     * @throws Exception .
     */
    public static String yuE() throws Exception {
        String timestamp = System.currentTimeMillis()/1000+"";
        String sign = MD5Util.getMD5(OPEN_ID + KEY + timestamp);
        String result =get(yueUrl.replace("%", timestamp).replace("$", sign));
        return result;
    }

    /**
     * 5.订单状态查询
     * @param orderid 商家订单号
     * @return 订单结果
     * @throws Exception
     */
    public static String orderSta(String orderid) throws Exception{
        return get(orderstaUrl.replace("!", orderid));
    }
    /**
     * 6.历史订单列表
     * @return
     * @throws Exception
     */
    public static String orderList() throws Exception{
        return get(orderListUrl);
    }

    /**工具类方法
     * get 网络请求
     * @param url 接收请求的网址
     * @return String类型 返回网络请求数据
     * @throws Exception 网络异常
     */
    public static String get(String url) throws Exception{
        return OkHttpUtil.httpURLConnection(url);
    }

    /**工具类方法
     * 此方法是把传进的字节流转化为相应的字符串并返回，此方法一般在网络请求中用到
     * @param is 输入流
     * @param charset 字符格式
     * @return String 类型
     * @throws Exception
     */
    public static String ConvertStreamToString(InputStream is, String charset)
            throws Exception {
        StringBuilder sb = new StringBuilder();
        try (InputStreamReader inputStreamReader = new InputStreamReader(is,
                charset)) {
            try (BufferedReader reader = new BufferedReader(inputStreamReader)) {
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line).append("\r\n");
                }
            }
        }
        return sb.toString();
    }
}
